package com.example.indenture.message.service.impl;

import com.example.indenture.common.vo.Result;
import com.example.indenture.message.dao.MessageDao;
import com.example.indenture.message.entity.Message;
import com.example.indenture.message.filter.WordFilter;
import com.example.indenture.message.service.MessageService;
import com.example.indenture.user.dao.UserDao;
import com.example.indenture.user.entity.User;
import com.example.indenture.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.time.LocalDateTime;
import java.util.*;

/**
 * @author gzp
 * @create 2023-02-22 10:41
 */
@Service
public class MessageServiceImpl implements MessageService {
    @Autowired
    private MessageDao messageDao;
    @Autowired
    private UserDao userDao;
    @Autowired
    private UserService userService;


    @Override
    @Transactional
    public List<List<Message>> selectMessage(int rid) {
        final List<List<Message>> list = new LinkedList<>();
        final List<Message> messages = messageDao.selectMessage(rid);
        //设置User
        for (Message message : messages) {
            final User useById = userService.getUseById(message.getUid());
            useById.setPassword("");
            message.setUser(useById);
        }

        //按照一级评论的发布时间排序
        Collections.sort(messages, new Comparator<Message>() {
            @Override
            public int compare(Message message1, Message message2) {
                if (message1.getPre() == 0 && message2.getPre() == 0) {
                    // 如果两个消息的pre属性都为0，则按照时间排序
                    return message2.getCreateDate().compareTo(message1.getCreateDate());
                } else if (message1.getPre() == 0) {
                    // 只有message1的pre属性为0，将其排在前面
                    return -1;
                } else if (message2.getPre() == 0) {
                    // 只有message2的pre属性为0，将其排在前面
                    return 1;
                } else {
                    // 其他情况下，保持原有顺序
                    return 0;
                }
            }
        });
        for (Message message : messages) {
            if (message.getPre() == 0) {
                final List<Message> temp = new LinkedList<>();
                temp.add(message);
                for (Message message2 : messages) {
                    if (message.getId() == message2.getPre()) {
                        temp.add(message2);
                    }
                }
                list.add(temp);
            }
        }
        return list;
    }


//    @Override
//    @Transactional
//    public Map<Message, List<Message>> selectMessage(int rid) {
//        //使用linkedHashMap来保证存入的元素有序
//        final Map<Message, List<Message>> map = new LinkedHashMap<>();
//        final List<Message> messages = messageDao.selectMessage(rid);
//        //设置User
//        for (Message message : messages) {
//            final User useById = userService.getUseById(message.getUid());
//            useById.setPassword("");
//            message.setUser(useById);
//        }
//
//        //按照一级评论的发布时间排序
//        Collections.sort(messages, new Comparator<Message>() {
//            @Override
//            public int compare(Message message1, Message message2) {
//                if (message1.getPre() == 0 && message2.getPre() == 0) {
//                    // 如果两个消息的pre属性都为0，则按照时间排序
//                    return message2.getCreateDate().compareTo(message1.getCreateDate());
//                } else if (message1.getPre() == 0) {
//                    // 只有message1的pre属性为0，将其排在前面
//                    return -1;
//                } else if (message2.getPre() == 0) {
//                    // 只有message2的pre属性为0，将其排在前面
//                    return 1;
//                } else {
//                    // 其他情况下，保持原有顺序
//                    return 0;
//                }
//            }
//        });
//
//
//        for (Message message : messages) {
//
//            if (message.getPre() == 0) {
//                //先去找是否已近创建好了
//                final List<Message> messages1 = map.get(message);
//                if(messages1==null){
//                    final ArrayList<Message> tmp = new ArrayList<>();
//                    map.put(message, tmp);
//                }else{
//                    messages1.add(message);
//                }
//
//            } else {
//                final List<Message> tmp = map.get(getMessageByMid(message.getPre()));
//                if (tmp != null) {
//                    tmp.add(message);
//                } else {
//                    //创建二级评论槽
//                    final ArrayList<Message> messages1 = new ArrayList<>();
//                    messages1.add(message);
//                    //创建一级评论并放入
//                    map.put(getMessageByMid(message.getPre()),messages1);
//                }
//
//            }
//        }
//        return map;
//    }

    @Override
    public Result<Message> insertMessage(Message message) {
        message.setCreateDate(LocalDateTime.now());
        message.setUpdateTime(LocalDateTime.now());
        message.setDes(WordFilter.replaceWords(message.getDes()));
        messageDao.insert(message);
        return Result.ok(message);
    }

    @Override
    public Message getMessageByMid(int mid) {
        return messageDao.getMessageById(mid);
    }
}
